// #ifdef H5
export const isWXBrowser = navigator.userAgent.toLowerCase().includes('micromessenger')
// #endif

// 截取地址栏code
function getUrlCode(name) { // 去url上的id
  const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`, 'i')
  const r = window.location.search.substring(1).match(reg)
  if (r != null) return decodeURIComponent(r[2])
  return null
}

export function login({ appid = 'wx9c907e79891f91fe' }) {
  return new Promise((resolve, reject) => {
    if (!isWXBrowser()) {
      reject({ code: 400, msg: '请在微信环境重试' })
    }
    // 获取当前页面的url
    const link = window.location.href
    console.log(link, 'link')
    // 判断link中有没有code=字符串，
    const getCode = getUrlCode('code')
    if (getCode) {
      // 没有code= 发请求
      const url = encodeURIComponent(link)
      const authURL
                = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${url}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
      window.location.href = authURL
    }
    else {
      // 回调函数已经执行 返回的链接存在code= 地址解析
      console.log(getCode, 'code')
      resolve({ code: 200, authCode: getCode, msg: '获取code成功' })
    }
  })
}

/*
 *微信公众号支付
 *
 */
function wxPublic() {
  if (typeof WeixinJSBridge === 'undefined') {
    function onBridgeReady(params) {
      WeixinJSBridge.invoke('getBrandWCPayRequest', {
        appId: params.appId, // 公众号ID，由商户传入
        timeStamp: params.timeStamp.toString(), // 时间戳，自1970年以来的秒数
        nonceStr: params.nonceStr, // 支付签名随机字符串
        package: params.package, // 订单详情扩展字符串，prepay_id=****
        signType: params.signType, // 签名类型，默认为MD5
        paySign: params.paySign // 支付签名
      }, (res) => {
        if (res.err_msg === 'get_brand_wcpay_request:ok') {

        }
        else if (res.err_msg === 'get_brand_wcpay_request:fail') {
          // ('错误提示', "支付失败")
        }
        else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
          // ('错误提示', "支付失败")
        }
        // if (res.err_msg == "get_brand_wcpay_request:ok") {
        // 使用以上方式判断前端返回,微信团队郑重提示：
        // res.err_msg将在用户支付成功后返回ok，但并不保证它绝对可靠。
        // }
        console.log(res)
      })
    }
    if (document.addEventListener) {
      document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady(params), false)
    }
    else if (document.attachEvent) {
      document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady(params))
      document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady(params))
    }
  }
  else {
    wx.config({
      debug: params.debug, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: params
        .appId, // 必填，公众号的唯一标识
      timestamp: params
        .timeStamp, // 必填，生成签名的时间戳
      nonceStr: params.nonceStr, // 必填，生成签名的随机串
      signature: params.paySign, // 必填，签名
      jsApiList: ['chooseWXPay'] // 必填，需要使用的JS接口列表 比如我要调用支付接口 那么就是 [chooseWXPay]
    })

    wx.ready(() => {
      // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
      wx.chooseWXPay({
        timestamp: params
          .timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
        nonceStr: params.nonceStr, // 支付签名随机串，不长于 32 位
        package: params.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
        signType: params.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
        paySign: params.paySign, // 支付签名
        success(res) {
          // 支付成功后的回调函数
          console.log(res)
        },
        // 支付取消回调函数
        cancel(res) {
          console.log(res)
          alert('用户取消支付~')
        },
        fail(res) {
          console.log(res)
        }
      })
    })
  }
}

export function pay() {
  if (isWXBrowser()) {
    wxPublic()
  }
  else {
    const code = getUrlCode('code')
    // 请求后台得到
    http.get('wxpay', {
      params: {
        code
      }
    }).then(res => {
      const redirect_url = encodeURIComponent('https://www.wechatpay.com.cn') // 获取当前页面地址作为回调地址
      window.location.href = `${res.memUrl}&redirect_url=${redirect_url}`
    })
  }
}
